<?php

# -- DÉBUT NOTE DE LICENCE -------------------------------------
#
# Ce fichier fait partie de Clicpage.
#
# Copyright (c) 2010 Francois (www.clicpage.net)
# Distribué selon les termes de la licence GPL version 2.0.
# Consultez le fichier LICENCE ou
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- FIN NOTE DE LICENCE ---------------------------------------

class generateurContenu extends cpGenerateur
{

	
	
	
	
	/// @name Administration
	//@{
	

	public function preparerModule($module)
	{

		# Vérification des permissions
		if(	$this->core->auth->verifierPermission('pages') &&
			($this->page->utilisateur_id == $this->core->auth->getUtilisateurID() ||
			 $this->core->auth->verifierPermission('toutesPages') )
		)
		{
			
			# Boutons d'action
			if($this->core->auth->verifierPermission('publierPage')) {
				$module->ajouterBoutonAction(__('Publier'), '#', 'boutonAction_publier');
			}
			$module->ajouterBoutonAction(__('Enregistrer comme brouillon'), '#', 'boutonAction_enregistrer');
			
			# Actions autorisées
			$module->setActionsAutorisees(
				'enregistrerPage',
				'publierPage',
				'restaurerPage'
			);
			
		}
		
		# Bouton d'action «Aperçu»
		$module->ajouterBoutonAction(__('Aperçu'), '#', 'boutonAction_apercu');
		
		$module->setCSS('modifierPage');
		$module->setJavascript('modifierPage,modifierPage_contenu');
		
	}
	

	public function action_enregistrerPage($module)
	{

		if($this->page->page_id != $_POST['page_id']) {
			return;
		}
		
		# Début de la transaction
		$this->core->con->begin();
		
		try {
		
			# Curseur
			$cur = $this->core->con->openCursor($this->core->prefix.'temp_pages');
			
			# Propriétés communes à toutes les pages
			$this->adminProprietesEnregistrer($cur, $_POST);
			
			# page_titre
			$cur->page_titre				= $_POST['page_titre'];
			
			# page_entete et page_contenu
			$pattern = $_POST['page_format'] == '1' ? '/<hr\s+id=("|\')cp-entete("|\')\s*\/*>/i': '/&&&/i';
			$matches = preg_split($pattern, $_POST['page_contenu'], 2);
			
			if(count($matches) == 2) {
				$matches[1] = preg_replace('#^<p>&nbsp;</p>#ms','',$matches[1]);			
				$page_entete = $matches[0];
				$page_contenu = $matches[1];
			} else {
				$page_entete = '';
				$page_contenu = $_POST['page_contenu'];
			}
			
			$page_entete_xhtml = '';
			$page_contenu_xhtml = '';
			
			# Traitement du contenu
			$this->adminTraiterContenu($page_entete, $page_entete_xhtml, $cur->page_options['cp']['format']);
			$this->adminTraiterContenu($page_contenu, $page_contenu_xhtml, $cur->page_options['cp']['format']);
	
			$cur->page_entete = $page_entete;
			$cur->page_entete_xhtml = $page_entete_xhtml;
			$cur->page_contenu = $page_contenu;
			$cur->page_contenu_xhtml = $page_contenu_xhtml;	
			
			# Enregistrer la liste des médias
			$page_options = $cur->page_options;
			$page_options['cp']['medias'] = $this->medias;
			$cur->page_options = $page_options;
			
			# Enregistrer dans la base de données
			$this->page->enregistrer($cur);		
			$module->messageOK(__('Le brouillon a été enregistré avec succès.'));
			
			# Fin de la transaction
			$this->core->con->commit();
		} catch(Exception $e) {
			$this->core->con->rollback();
			throw $e;
		}
		
	}
	
	
	public function action_publierPage($module)
	{
		
		# Permission nécessaire: publierPage
		$this->core->auth->verifierPermission('publierPage', true);
		
		# Enregistrer les modifications
		$this->action_enregistrerPage($module);
	
		# Publier la page	
		$this->page->publier();
		
		$module->messageOK(__('La page a été publiée avec succès.'));
		
	}
	
	
	public function action_restaurerPage($module)
	{
		$this->page->restaurer();
		$module->messageOK(__('La page a été restaurée avec succès.'));
	}
	
	
	public function adminBody($module)
	{

		# Valeur des champs de formulaire		
		if(!$module->erreursFormulairePresentes())
		{
			
			$page_titre = $this->page->page_titre;

			$contenu = $this->page->page_contenu == '' ? $this->page->page_contenu_xhtml : $this->page->page_contenu;
			$entete = $this->page->page_entete == '' ? $this->page->page_entete_xhtml : $this->page->page_entete;
			
			$separateurEntete = $this->page->page_options['format'] == CP_FORMAT_WIKI ? '&&&' : '<hr id="cp-entete" />';
			
			$page_contenu = !empty($entete) ?
				$entete."\n".$separateurEntete."\n".$contenu :
				$contenu;
			
		}
		else
		{
			$page_titre = 	$_POST['page_titre'];
			$page_contenu =	$_POST['page_contenu'];	
		}
		
		# HTML de l'interface		
		$html =
			'<form id="modifierPage" method="post" action="index.php?module=modifierPage&page_id='.$this->page->page_id.'" autocomplete="off">'.
				form::hidden('page_id', $this->page->page_id).
				form::hidden('nonce_enregistrer', $this->core->genererNonce('enregistrerPage')).
				form::hidden('nonce_publier', $this->core->genererNonce('publierPage')).
				form::hidden('nonce', '').
				form::hidden('action', '').
				form::hidden('apercu', '').
				'<div id="modifierPage_gauche">'.
					$module->afficherMessages().
					'<p class="onTop">'.
						'<label for="page_titre">'.__('Titre').'</label>'.
						$module->field('page_titre', 40, 250, html::escapeHTML($page_titre)).
					'</p>'.
					'<p class="onTop">'.
						'<label for="page_contenu">'.__('Contenu').'</label>'.
						$module->textArea('page_contenu', 40, 10, $page_contenu, 'tinymce').
					'</p>'.
				'</div>'.
				'<div id="modifierPage_droite">'.$this->adminProprietesHTML($module).'</div>'.
			'</form>';
		
		return $html;
		
	}


	public function curseurNouvellePage($cur)
	{
		parent::curseurNouvellePage($cur);		
		$cur->page_mots = implode(' ', text::splitWords(text::toUTF8(html_entity_decode(html::clean($cur->page_titre)))));		
	}
	
	
	public function publier()
	{

		# Enregistrer la liste des médias
		$this->medias = $this->page->page_options['cp']['medias'];
		$this->adminEnregistrerMediasPage();
		
		# Mots
		$mots = html::clean(
			$this->page->page_titre.' '.
			$this->page->page_entete_xhtml.' '.
			$this->page->page_contenu_xhtml);
		$this->page->page_mots	= implode(' ', text::splitWords(text::toUTF8(html_entity_decode($mots))));
		
		# Publier la page
		parent::publier();
		
	}
	//@}

	
}

?>